<script>
  // 滑窗算法
  // 动态规划
  // var totalFruit = function(fruits) {
  //   let i = 0;
  //   let j = 0;
  //   let max = 0;
  //   while(i < fruits.length && j < fruits.length) {
  //     if (Array.from(new Set(fruits.slice(j, i + 1))).length <= 2) {
  //       max = Math.max(max, i - j + 1);
  //       i++;
  //     } else {
  //       j++
  //     }
  //   }
  //   return max;
  // };

  // 用map记录优化
  var totalFruit = function(fruits) {
    let j = 0;
    let max = 1;
    let map = new Map();
    for(let i = 0; i < fruits.length; i++) {
      map.set(fruits[i], i);
      if(map.size > 2) {
        let minIndex = fruits.length - 1;
        for(const [key, index] of map) {
          if (index < minIndex) {
            minIndex = index
          }
        }

        map.delete(fruits[minIndex]);
        j = minIndex + 1;
      }

      max = Math.max(max, i - j + 1)
    }
    return max;
  };

  console.log(totalFruit([3,3,3,1,2,1,1,2,3,3,4]))
</script>